#include "ReadFileDialog.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QDir>
#include <QTextStream>
#include <iostream>
#define WINDOW_TITLE "选择文件"

ReadFileDialog::ReadFileDialog(QWidget *parent)
        : QDialog(parent) // 调用父类构造函数
{
    // 创建布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    QHBoxLayout *fileLayout = new QHBoxLayout;

    // 创建文件路径文本框
    filePathEdit = new QLineEdit(this);
    filePathEdit->setReadOnly(true); // 设置为只读

    // 创建加载按钮
    loadButton = new QPushButton("选择文件", this);
    connect(loadButton, &QPushButton::clicked, this, &ReadFileDialog::openFile);

    // 创建确定按钮
    confirmButton = new QPushButton("确定", this);
    connect(confirmButton, &QPushButton::clicked, this, &ReadFileDialog::copyFile);

    // 将文件路径文本框和按钮添加到水平布局
    fileLayout->addWidget(filePathEdit);
    fileLayout->addWidget(loadButton);
    fileLayout->addWidget(confirmButton); // 添加确定按钮

    // 创建用于显示文件内容的文本框
    fileContentEdit = new QTextEdit(this);
    fileContentEdit->setReadOnly(true); // 设置为只读
    fileContentEdit->setStyleSheet("background-color: white;"); // 或其他颜色
    fileContentEdit->setStyleSheet("background-color: white; border-radius: 5px;"); // 5px 是圆角的半径，可以根据需要调整


    // 将水平布局和文本框添加到主布局中
    layout->addLayout(fileLayout);
    layout->addWidget(fileContentEdit); // 添加内容显示框

    setLayout(layout);  // 设置对话框布局
    this->setWindowTitle(WINDOW_TITLE);  // 设置窗口标题
    this->resize(600, 400);  // 调整对话框大小

}

ReadFileDialog::~ReadFileDialog() {}

void ReadFileDialog::openFile()
{
    // 打开文件对话框，选择 .txt 文件
    QString fileName = QFileDialog::getOpenFileName(this, "选择 G 代码文件", "", "Text Files (*.txt)");

    if (fileName.isEmpty()) {
        return;  // 如果未选择文件，则返回
    }

    // 将文件路径显示在文本框中
    filePathEdit->setText(fileName);

    // 读取文件内容并显示在文本框中
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&file);
        fileContentEdit->setPlainText(in.readAll()); // 显示全部内容
        file.close();
    } else {
        QMessageBox::warning(this, "错误", "无法打开文件");
    }
}

void ReadFileDialog::copyFile()
{
    QString sourceFileName = filePathEdit->text();
    QString sourceFileBaseName = QFileInfo(sourceFileName).fileName(); // 提取源文件名
    QString targetDirectory = QDir::currentPath() + "/program/";
    QString targetFileName = targetDirectory + sourceFileBaseName; // 设置目标文件名为源文件名
    std::cout<<targetFileName.toStdString()<<std::endl;

    // 检查目标路径是否存在，若不存在则创建
    QDir dir(targetDirectory);
    if (!dir.exists()) {
        dir.mkpath("."); // 创建路径
    }

    // 复制文件
    if (QFile::copy(sourceFileName, targetFileName)) {
        QMessageBox msgBox;
        msgBox.setText("文件已成功添加到 " + targetFileName);
        msgBox.setStandardButtons(QMessageBox::Ok);

        // 连接按钮点击信号以关闭对话框
        connect(msgBox.button(QMessageBox::Ok), &QPushButton::clicked, this, &ReadFileDialog::accept);

        msgBox.exec();  // 显示消息框
    } else {
        QMessageBox::warning(this, "错误", "文件添加失败");
    }
}

